package com.bndg.blackjack.widget;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Typeface;
import android.graphics.drawable.Drawable;
import android.graphics.drawable.VectorDrawable;
import android.util.AttributeSet;
import android.view.View;

import androidx.annotation.Nullable;
import androidx.core.content.ContextCompat;
import androidx.core.graphics.drawable.DrawableCompat;

import com.bndg.blackjack.R;

import java.time.format.TextStyle;

public class VectorTextView extends View implements View.OnClickListener {

    private Drawable vectorDrawable; // 用于存储 VectorDrawable
    private String text = "E"; // 要显示的文字
    private Paint textPaint; // 文字画笔
    private boolean isChecked = false; // checked属性
    private int normalTextColor = Color.BLACK; // 正常文字颜色
    private int checkedTextColor = ContextCompat.getColor(getContext(), R.color.teal_700); // 选中时文字颜色
    private int normalDrawableColor; // 正常VectorDrawable颜色
    private int checkedDrawableColor = ContextCompat.getColor(getContext(), R.color.teal_700); // 选中时VectorDrawable颜色

    public VectorTextView(Context context) {
        super(context);
        init(context);
    }

    public VectorTextView(Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
        init(context);
    }

    public VectorTextView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        init(context);
    }

    private void init(Context context) {
        // 初始化 VectorDrawable
        vectorDrawable = ContextCompat.getDrawable(context, R.drawable.tooth); // 替换为你的 VectorDrawable 文件
        if (vectorDrawable != null) {
            vectorDrawable.setBounds(0, 0, getWidth(), getHeight()); // 设置初始边界
            normalDrawableColor = Color.BLACK;
        }

        // 初始化文字画笔
        textPaint = new Paint();
        textPaint.setColor(normalTextColor); // 文字颜色
        textPaint.setTextSize(38f); // 文字大小
        textPaint.setTextAlign(Paint.Align.CENTER); // 居中对齐
        textPaint.setTypeface(Typeface.DEFAULT_BOLD);
        textPaint.setAntiAlias(true); // 抗锯齿

        // 设置点击事件监听器
        setOnClickListener(this);
    }

    @Override
    protected void onSizeChanged(int w, int h, int oldw, int oldh) {
        super.onSizeChanged(w, h, oldw, oldh);
        // 更新 VectorDrawable 的边界
        if (vectorDrawable != null) {
            vectorDrawable.setBounds(0, 0, w, h);
        }
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);

        // 根据checked状态设置VectorDrawable颜色
        if (vectorDrawable != null) {
            Drawable wrappedDrawable = DrawableCompat.wrap(vectorDrawable);
            DrawableCompat.setTint(wrappedDrawable, isChecked ? checkedDrawableColor : normalDrawableColor);
            wrappedDrawable.draw(canvas);
        }

        // 计算文字的宽高
        float textWidth = textPaint.measureText(text);
        float textHeight = textPaint.descent() - textPaint.ascent(); // 获取文字的高度

        // 计算文字的位置，确保文字垂直居中
        float x = getWidth() / 2f; // 水平居中
        float y = getHeight() / 2f - (textPaint.descent() + textPaint.ascent()) / 2 - textHeight / 3; // 垂直居中，调整基线

        // 根据checked状态设置文字颜色
        textPaint.setColor(isChecked ? checkedTextColor : normalTextColor);

        // 绘制文字
        canvas.drawText(text, x, y, textPaint);
    }

    // 设置文字内容
    public void setText(String text) {
        this.text = text;
        invalidate(); // 触发重绘
    }

    // 设置文字颜色
    public void setTextColor(int color) {
        normalTextColor = color;
        textPaint.setColor(color);
        invalidate(); // 触发重绘
    }

    // 设置checked状态
    public void setChecked(boolean checked) {
        if (this.isChecked != checked) {
            this.isChecked = checked;
            invalidate(); // 触发重绘
        }
    }

    // 获取checked状态
    public boolean isChecked() {
        return isChecked;
    }

    @Override
    public void onClick(View v) {
        setChecked(!isChecked);
    }
}